"""
实现访问计数器的中间件：
"""
from ipaddress import ip_address


class VisitCounterMiddleware:
    def __init__(self, get_response):  # 初始化方法，用于获取响应对象。
        self.get_response = get_response  # 获取响应对象。
        # One-time configuration and initialization.
        self.counter = 0  # 初始化计数器，用于记录访问次数。

    def __call__(self, request):  # 调用方法，用于处理请求。
        # 请求处理前--计数器+1
        self.counter += 1  # 计数器+1。
        
        # print("您当前没有登录，必须登录之后才能访问网站。")
        # 记录当前访问网站的ip地址。
        ip_address = self.get_client_ip(request)  # 获取客户端ip地址。 
        print(f"当前访问网站的ip地址：{ip_address}" )  # 打印ip地址。
        print(f"当前访问次数：{self.counter}" )  # 打印访问次数。
        
        #继续处理请求
        response = self.get_response(request)  # 获取响应对象。
        
        # 请求处理后--计数器不变。
        return response  # 返回响应对象。
    
    def get_client_ip(self,request):  # 获取客户端ip地址的方法。
        # 获取客户端的真实ip地址。  
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')  
        if x_forwarded_for:  # 如果有代理ip地址。
            ip = x_forwarded_for.split(',')[0]  # 获取第一个代理ip地址。
        else:  # 如果没有代理ip地址。
            ip = request.META.get('REMOTE_ADDR')  # 获取客户端ip地址。
        return ip  # 返回ip地址。